package notwork;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class UdpEchoClient_3 {
    private String IpSever;
    private int portSever;
    private DatagramSocket socket=null;

    //和服务器不同，客户端是要先发出请求，所以第一个数据报是从客户端发出，需要知道服务器的IP地址和端口号
    public UdpEchoClient_3(String ipSever, int portSever) throws SocketException {
        this.IpSever = ipSever;
        this.portSever = portSever;
        socket=new DatagramSocket();
    }

    public void start() throws IOException {
        Scanner scanner=new Scanner(System.in);

        while(true){
//1.从控制台读取用户输入的信息
            System.out.printf("请输入请求:");
            if(!scanner.hasNext()){
                break;
            }
            String request= scanner.next();
            //2.把请求发送给服务器，构造一个数据报，将字符串转化为字节数组，加上字节数组的长度，以及将IP地址从字符串转化为指定的类型，加上端口号

            DatagramPacket requestPacket=new DatagramPacket(request.getBytes(),request.getBytes().length,
                    InetAddress.getByName(IpSever),portSever);
            //将数据报发送给服务器
            socket.send(requestPacket);

            //创建一个数据报对象用来接收服务器返回的数据报
            DatagramPacket reponsePacket=new DatagramPacket(new byte[40960],40960);
            //接收数据报
            socket.receive(reponsePacket);
            //将数据报的信息转化为字符串
            String reponse=new String(reponsePacket.getData(),0,reponsePacket.getLength());
            //将响应的信息打印
            System.out.println(reponse);
        }
    }

    public static void main(String[] args) throws IOException {
        //127.0.0.1通常被称为回环IP，可以将服务器和客户端在一台电脑上运行
     UdpEchoClient_3 client_3=new UdpEchoClient_3("127.0.0.1",4565);
     client_3.start();
    }
}
